package org.springframework.beans.factory.support;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;

/**
 * @Name InstantiationStrategy
 * @Description: Bean 实例化策略接口
 * 描述信息：针对 Bean 的实例化，抽象出一个实例化策略的接口 InstantiationStrategy，有两个实现类：
 * - SimpleInstantiationStrategy：简单的 Bean 实例化策略，根据 Bean 的无参构造函数实例化对象。
 * - CglibSubclassingInstantiationStrategy，使用 CGLIB 动态生成子类。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-15 13:44:50
 **/
public interface InstantiationStrategy {

    /**
     * Bean 实例化策略
     *
     * @param beanDefinition Bean 定义信息
     * @return java.lang.Object Bean 实例
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 13:46:23
     */
    Object instantiate(BeanDefinition beanDefinition) throws BeansException;

}

